package Gather.MapExercise.TreeMap;

import java.util.StringJoiner;
import java.util.TreeMap;

/**
 * ClassName:TreeMap004
 * Package:Gather.MapExercise.TreeMap
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/20-22:01
 * @Version:v1.0
 */
public class TreeMap004 {
    /*需求：字符串"aababcabcdabcde"
    * 请统计字符串中每一个字符出现的次数,并按照一下格式输出
    * 输出结果:
    *  a(5) b(4) c(3) d(2) e(1)
    * */

    /*统计
    * 1.计数器思想
    * 弊端:如果我们要统计的东西比较多,非常的不方便
    * 2.利用Map集合进行统计
    * 2.1:HashMap
    * 2.2:TreeMap
    *
    * 如果题目中没有要求对结果进行排序,默认使用HashMap
    * 如果题目中要求对结果进行排序,使用TreeMap
    *
    * 键:表示要统计的内容
    * 值:表示次数*/
    public static void main(String[] args) {
        //1.定义字符串
        String s = "aababcabcdabcde";
        //创建集合
        TreeMap<Character , Integer> treeMap = new TreeMap<>();
        //遍历字符串得到里面每一个字符
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
//            System.out.println(c);
            //拿着c到集合中判断是否存在
            //存在,表示当前字符又出现了一次
            //不存在,表示当前字符是第一次出现
            if (treeMap.containsKey(c)){
                //存在
                //先把已经出现的次数拿出来
                int count = treeMap.get(c);
                //当前字符又出现了一次
                count++;
                //把自增之后的结果再添加到集合当中
                treeMap.put(c,count);
            }else {
                //不存在
                treeMap.put(c,1);
            }
        }
        //遍历集合,并按照指定的格式进行拼接--StringJoiner/StringBuilder
        //a(5) b(4) c(3) d(2) e(1)
        StringBuilder sb = new StringBuilder();
        treeMap.forEach((key,value)-> sb.append(key).append("(").append(value).append(")"));
        System.out.println(sb);

        StringJoiner sj = new StringJoiner("","","");
        treeMap.forEach((key,value)-> sj.add(key+"").add("(").add(value+")"));
        System.out.println(sb);
    }
}
